package br.com.salao.model;

import java.util.List;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

import org.apache.log4j.Logger;

import br.com.salao.entity.Estabelecimento;
import br.com.salao.entity.Login;
import br.com.salao.session.EstabelecimentoBase;
import br.com.salao.util.Utils;

public class EstabelecimentoModel {

	private Logger logger = Logger.getLogger(EstabelecimentoModel.class.getName());	

	public Estabelecimento inserir(Estabelecimento estabelecimento) throws Exception{	

		try{
			EstabelecimentoBase estabelecimentoBase  = getBean();
			return estabelecimentoBase.inserir(estabelecimento);
		}catch (Exception e) {

			logger.error("EstabelecimentoModel :: inserir() :: Erro ao inserir estabelecimento ::");

			StringBuffer sb = new StringBuffer();
			sb.append(e.getCause() + "\n");
			sb.append(e.getMessage() + "\n");
			logger.error(sb.toString(),e);

			return null;			
		}
	}

	public Estabelecimento formatarCampos(Estabelecimento estabelecimento) throws Exception{		

		estabelecimento.getEndereco().setLogradouro(Utils.removeAcentosTexto(estabelecimento.getEndereco().getLogradouro().trim().toUpperCase()));
		estabelecimento.setRazaoSocial(estabelecimento.getRazaoSocial().trim().toUpperCase());

		return estabelecimento;
	}

	public boolean isCampoNulo(Estabelecimento estabelecimento) throws Exception{


		if(estabelecimento.getEndereco().getLogradouro() == null ||
				estabelecimento.getEndereco().getBairro().getDescricao() == null ||
				estabelecimento.getEndereco().getBairro().getCidade().getNome() == null){

			return true;
		}

		return false;
	}

	public List<Estabelecimento> buscarEstabelecimentosPorUsuario(Login login) throws Exception{
		try{
			EstabelecimentoBase estabelecimentoBase  = getBean();
			return estabelecimentoBase.buscarEstabelecimentosPorUsuario(login);
		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			return null;
		}
	}

	public Estabelecimento buscarEstabelecimentoPorId(int idEstabelecimento){
		try{
			EstabelecimentoBase estabelecimentoBase  = getBean();
			return estabelecimentoBase.buscarEstabelecimentosPorId(idEstabelecimento);
		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			return null;
		}
	}

	public List<Estabelecimento> buscarEstabelecimentoPorCidade(int idCidade) throws Exception{
		try{
			EstabelecimentoBase estabelecimentoBase  = getBean();
			return estabelecimentoBase.buscarEstabelecimentoPorCidade(idCidade);
		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			throw e;
		}
	}

	public Estabelecimento update(Estabelecimento estabelecimento){
		try{
			EstabelecimentoBase estabelecimentoBase  = getBean();
			return estabelecimentoBase.update(estabelecimento);
		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			return null;
		}
	}

	public List<Estabelecimento> buscarEstabelecimentoPorBairro(int idBairro){
		try{
			EstabelecimentoBase estabelecimentoBase  = getBean();
			return estabelecimentoBase.buscarEstabelecimentoPorBairro(idBairro);
		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			return null;
		}
	}
	
	public List<Estabelecimento> buscarEstabelecimentoPorNomeFantasia(String nomeFantasia){
		try{
			EstabelecimentoBase estabelecimentoBase  = getBean();
			return estabelecimentoBase.buscarEstabelecimentoPorNomeFantasia(nomeFantasia);
		} catch (Exception e) {

			StringBuffer sb = new StringBuffer();
			sb.append(e.getStackTrace());
			logger.error(sb.toString(),e);

			return null;
		}
	}
	
    public EstabelecimentoBase getBean() throws Exception {
    	
        Properties prop = Utils.getProperties();     
        Context ctx = new InitialContext(prop); 
        Object ref = ctx.lookup(prop.getProperty("ESTABELECIMENTO_LOOKUP"));       
      
        return (EstabelecimentoBase)PortableRemoteObject.narrow(ref, EstabelecimentoBase.class);
    }
}
